判断无权无向图是否为树.cpp
#include<bits/stdc++.h>
using namespace std;
//m=n-1加上无环,能够保证无向图连通
//有向图不可以
const int N = 10010;
int fa[N];
int find(int x){
if(x==fa[x]){
return x;
}
return fa[x]=find(fa[x]);
}
int main(){
int n,m;cin>>n>>m;
if(m!=n-1){
cout<<"NO";
return 0;
}
for(int i = 1;i<=n;i++){
fa[i] = i;
}
for(int i = 0;i<m;i++){//判断是否有环
int u,v;cin>>u>>v;
int fu = find(u);
int fv = find(v);
if(fu==fv){//如果已经在同一个集合了,后面又要连一条边,那肯定就成环了
cout<<"NO";
return 0;
}
fa[fu] = fv;
}
cout<<"YES";
return 0;
}